#include <stdio.h>
#include "dothead/file_interchange.h"

int main(void)
{
    int * p;
// ../Pointer.c:10:5: 警告：‘p’ is used uninitialized [-Wuninitialized]
//    10 |     printf("1 %p\n", p);
//       |     ^~~~~~~~~~~~~~~~~~~
// ../Pointer.c:8:11: 附注：‘p’在此声明
//    8  |     int * p;
//       |           ^
    int a = 10;
    printf("1 %p\n", p);
    printf("2 %d\n", a);
    p = &a;
    printf("3 %p\n", p);
    printf("4 %d\n", *p);
    //*我猜是因为函数字面量本身表示这段机器码的地址*
    long double (*PFunction)(double, double) = &AddTwoNumber; /// 为什么这里可以省略`&`？
    printf("5 %Lf\n", PFunction(3.1, 3));
    int b = 20;
    InterChange(&a, &b);// 定义两变量，其地址作为函数指针操作的参数
    printf("%d %d", a, b);
    return 0;
}

// 1 0x7ffff7fe6380
// 2 10
// 3 0x7fffffffe214
// 4 10
// 5 6.100000

// #include <stdio.h>
// 
// int main(void)
// {
//     int * p;
//     int a = 10;
//     printf("%p\n", p);
//     printf("%d\n", a);
//     p = &a;
//     printf("%p\n", p);
//     printf("%d", *p);
// }
// // (nil)
// // 10
// // 0x7ffe842853ac
// // 10⏎
